/******************************************************************************/
/*  Class RFILE                                                               */
/*  PO: S. Maslyakov, rusoil.9@gmail.com                                      */
/*                                                                            */
/*  Revision:     1.0                                                         */
/*  Date:         2011/01/18 14:00:33                                         */
/******************************************************************************/


#ifndef __RFILE_H
#define __RFILE_H


#include "data_types.h"
#include "Rfile\rfile_def.h"
#include "Rfile\rfile_map.h"


//==============================================================================
//  Class RFILE
//==============================================================================
class RFILE
{
public:
  static void Init_Rfile();
  static void Init_rfile_tasks();
  static void Activate_rfile_tasks();
  static void * Get_rfile_mutex();
  static void ClearRfile();
  static bool_t ReadRfile(__RFILE_DATA * const _pData);
  static bool_t ReadRfileSafe(__RFILE_DATA * const _pData);
  static bool_t WriteRfile(const __RFILE_DATA * const _pData);
  static bool_t WriteRfileSafe(const __RFILE_DATA * const _pData);
  static const uint8_t * GetPointer(const uint32_t _addr);

private:
  static void Create_rfile_mutex();
  static void PollDiscrettes();
  static void PollDevices();
  static void SetErrorStatus(uint8_t * const _pStats, const uint32_t _bit);
  static void Task_rfile_discr_aggr(void * par);
  static void Task_rfile_dev_aggr(void * par);
  static uint32_t GetSpaceToEnd(const uint32_t _addr);

  static uint8_t m_rfile[RFILE_RAM_SIZE];
};
//==============================================================================
//==============================================================================


#endif